let a="helloworld";
{
    //substring和substr用于string
    //slice可以用于string和array,
    //substring和slice很接近，但是异常参数处理方式不一样，substring可以逆序取值，slice只能顺序取值，所以slice开始负数返回空
}
{
    //三个结果一样
    // console.log(a.substring(0));//helloworld
    // console.log(a.substr(0));//helloworld
    // console.log(a.slice(0));//helloworld

        //三个结果一样
        // console.log(a.substring(0,20));//helloworld
        // console.log(a.substr(0,20));//helloworld
        // console.log(a.slice(0,20));//helloworld
}

{
    //参数1一样，参数2不一样，结果长度不一样
    // console.log(a.substring(5,7));// wo
    // console.log(a.substr(5,7));// world
    // console.log(a.slice(5,7));// wo
}

{
    //参数1大于参数2，每个处理方式不一样
    //console.log(a.substring(8,2));// llowor,开始大于结束，会把开始和结束位置自动调换等同于a.substring(2,8)
    //console.log(a.substr(7,2));// rl 正常处理
    //console.log(a.slice(7,2));// 返回空字符串，说明参数1必须小于参数2，必须是顺序截取，不能逆序
}

{
    //参数2为负数，每个处理方式不一样
    //console.log(a.substring(2,-10));// he 逆序截取，从位置2开始向左边截取
    //console.log(a.substr(2,-2));// 返回空，长度不能是负数
    //console.log(a.slice(2,-2));// llowor 从1开始到倒数第2
}


{
    //参数为负数，都返回空
    // console.log(a.substring(-2,-1));// 返回空
    // console.log(a.substr(-2,-2));// 返回空，长度不能是负数
    // console.log(a.slice(-2,-5));// 返回空
}

{
    //参数1大于参数2，每个处理方式不一样
    console.log(a.substring(-2,5));// 负数从0开始，到5结束
    console.log(a.substr(-3,2));// rl倒数第3个开始
    console.log(a.slice(-2,5));// 返回空，不接受负数开始
}